export class TypeOf {
  static types(data) {
    return Object.prototype.toString.call(data);
  }
  static isNumber(data) {
    return TypeOf.types(data) === "[object Number]";
  }
  static isString(data) {
    return TypeOf.types(data) === "[object String]";
  }
  static isObject(data) {
    return TypeOf.types(data) === "[object Object]";
  }
  static isEmptyObject(data) {
    return TypeOf.isObject(data) && JSON.stringify(data) === "{}";
  }
  static isArray(data) {
    return TypeOf.types(data) === "[object Array]";
  }
  static isEmptyArray(data) {
    return TypeOf.isArray(data) && JSON.stringify(data) === "[]";
  }
  static isUndefined(data) {
    return TypeOf.types(data) === "[object Undefined]";
  }
  static isNull(data) {
    return TypeOf.types(data) === "[object Null]";
  }
  static isNil(data) {
    return TypeOf.isUndefined(data) || TypeOf.isNull(data);
  }
  static isEmpty(data) {
    return (
      TypeOf.isNil(data) ||
      TypeOf.isEmptyArray(data) ||
      TypeOf.isEmptyObject(data) ||
      data === ""
    );
  }
  static isFunction(data) {
    return TypeOf.types(data) === "[object Function]";
  }
}
